/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * GuiDadosPerfil.java
 *
 * Created on 27/11/2011, 16:38:14
 */
package view.gui;

import controller.ControllerPerfil;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import model.dao.DaoPerfil;
import model.dominio.AcaoSistema;
import model.dominio.PerfilUsuario;
import utilitario.JCheckBoxAcaoSistema;

/**
 *
 * @author Rodrigo
 * Classe responsável por tratar os dados de Perfis de Usuário.
 * Este tratamento consiste na Criação ou na Edição de Perfis.
 */
public class GuiDadosPerfil  extends JInternalFramePermissao {

    List<AcaoSistema> permissoes;
    PerfilUsuario perfil;
    private List<JCheckBoxAcaoSistema> checksPermissoes;

    /** Creates new form GuiDadosPerfil */
    /**
     * Construtor da interface gráfica para Criação de novo Perfil.
     * Além de inicializar os componentes, inicializa permissões que podem ser dadas aos Perfis.
     */
    public GuiDadosPerfil() {
        perfil = new PerfilUsuario();
        initComponents();
        inicializaPermissoes();
    }
    
    /**
     * Construtor da interface gráfica para Edição de um Perfil previamente cadastrado.
     * Permite edição do nome e das permissões que o Perfil possuirá.
     * 
     * @param perfil 
     * Objeto da classe PerfilUsuario, instanciado na busca, ao se clicar em uma linha da tabela.
     */
    public GuiDadosPerfil(PerfilUsuario perfil) {
        this.perfil = perfil;
        initComponents();
        inicializaPermissoes();
        boxNome.setText(perfil.getNome());
    }
    
    /**
     * Método responsável por inicializar a Lista de Permissões existente no banco de dados.
     * Esta lista é inicializada para que as permissões sejam atribuídas a cada Perfil existente.
     */
    private void inicializaPermissoes(){
        DaoPerfil dao = new DaoPerfil();
        checksPermissoes = new ArrayList<JCheckBoxAcaoSistema>();
        permissoes = dao.buscarPermissoes();
        String ultimoGrupo = "";
        JPanel grupo =new JPanel(new FlowLayout());
        JCheckBoxAcaoSistema check;
        List<JPanel> grupos = new ArrayList<JPanel>();
        GridLayout layout = (GridLayout) painelPermissoes.getLayout();
        
        for (AcaoSistema acao : permissoes) {
            if (!ultimoGrupo.equals(acao.getGrupo())) {
                ultimoGrupo = acao.getGrupo();
                grupo = new JPanel(new GridLayout(3, 1));
                grupo.setBorder(new TitledBorder(ultimoGrupo));
                grupos.add(grupo);
                if(grupos.size()>2 && grupos.size()%2==1){
                    layout.setRows(layout.getRows()+1);
                }
            }
            check = new JCheckBoxAcaoSistema(acao);
            if(perfil.getPermissoes().contains(acao)){
                check.setSelected(true);
            }else{
                
            }
            checksPermissoes.add(check);
            grupo.add(check);
        }
        //Definindo o numero de linhas e colunas do grid layout do painel de checkboxs
        
        for(JPanel painel:grupos){
            painelPermissoes.add(painel);
        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        Cancelar = new javax.swing.JButton();
        Cadastrar = new javax.swing.JButton();
        painel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        boxNome = new javax.swing.JTextField();
        jPanel1 = new javax.swing.JPanel();
        selTodos = new javax.swing.JButton();
        scroll = new javax.swing.JScrollPane();
        painelPermissoes = new javax.swing.JPanel();

        setClosable(true);
        setTitle("Perfil de Usuário");
        getContentPane().setLayout(null);

        Cancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/cancelar.png"))); // NOI18N
        Cancelar.setText("Cancelar");
        Cancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                CancelarActionPerformed(evt);
            }
        });
        getContentPane().add(Cancelar);
        Cancelar.setBounds(200, 340, 140, 60);

        Cadastrar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/salvar.png"))); // NOI18N
        Cadastrar.setText("Cadastrar");
        Cadastrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                CadastrarActionPerformed(evt);
            }
        });
        getContentPane().add(Cadastrar);
        Cadastrar.setBounds(30, 340, 140, 60);

        painel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Perfil"));
        painel1.setLayout(null);

        jLabel1.setText("Nome:");
        painel1.add(jLabel1);
        jLabel1.setBounds(10, 30, 60, 30);
        painel1.add(boxNome);
        boxNome.setBounds(60, 30, 290, 30);

        getContentPane().add(painel1);
        painel1.setBounds(0, 0, 370, 80);

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Permissões do Perfil"));
        jPanel1.setLayout(null);

        selTodos.setText("Marcar Todos");
        selTodos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                selTodosActionPerformed(evt);
            }
        });
        jPanel1.add(selTodos);
        selTodos.setBounds(10, 30, 160, 40);

        scroll.setHorizontalScrollBar(null);
        scroll.setInheritsPopupMenu(true);

        painelPermissoes.setLayout(new java.awt.GridLayout(1, 2));
        scroll.setViewportView(painelPermissoes);

        jPanel1.add(scroll);
        scroll.setBounds(10, 70, 350, 170);

        getContentPane().add(jPanel1);
        jPanel1.setBounds(0, 80, 370, 240);

        setBounds(0, 0, 386, 441);
    }// </editor-fold>//GEN-END:initComponents

    private void CancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_CancelarActionPerformed
        this.dispose();
}//GEN-LAST:event_CancelarActionPerformed

    private void CadastrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_CadastrarActionPerformed
        perfil.setNome(boxNome.getText());
        for(JCheckBoxAcaoSistema check:  checksPermissoes){
            if(check.isSelected()){
                perfil.addPermissoes(check.getAcao());
            }
        }
        if(ControllerPerfil.salvarPerfil(perfil)){
            JOptionPane.showMessageDialog(null,"Dados do perfil registrados com sucesso!","Sucesso!",JOptionPane.INFORMATION_MESSAGE);
            this.dispose();
        }else{
            JOptionPane.showMessageDialog(null,"Falha ao registrar os dados do perfil!","Falha",JOptionPane.ERROR_MESSAGE);
        }
}//GEN-LAST:event_CadastrarActionPerformed

    private void selTodosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selTodosActionPerformed
        if(selTodos.getText().equals("Marcar Todos")){
            for(JCheckBoxAcaoSistema check:checksPermissoes){
                check.setSelected(true);
            }
            selTodos.setText("Desmarcar Todos");
        }else{
            for(JCheckBoxAcaoSistema check:checksPermissoes){
                check.setSelected(false);
            }
            selTodos.setText("Marcar Todos");
        }
    }//GEN-LAST:event_selTodosActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton Cadastrar;
    private javax.swing.JButton Cancelar;
    private javax.swing.JTextField boxNome;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel painel1;
    private javax.swing.JPanel painelPermissoes;
    private javax.swing.JScrollPane scroll;
    private javax.swing.JButton selTodos;
    // End of variables declaration//GEN-END:variables

    @Override
    public int getPermissao() {
        if(perfil.getCodigo()!=null && perfil.getCodigo()>0){
            return 24;
        }else{
            return 23;
        }
    }
}
